iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
ChatGPT & Codex

從 Prompt Engineering 到 Copilot / Codex 實務 30 天系列 第 6 篇

Day 06:【LeetCode 破題】拒絕死背解答:引導 ChatGPT 先梳理題目條件與邊界條件

  • 分享至 

  • xImage
  •  

完成了第一週的工具建置與 Prompt 工程技巧後,從今天開始,我們將進入工程師最常面臨的實戰場景之一:演算法解題(LeetCode)。

很多工程師在刷題時使用 AI 的方式往往是:「把題目整段複製 ➔ 貼給 ChatGPT ➔ 叫它給出最優解 ➔ 複製貼回 LeetCode」。這種做法雖然能快速拿到綠色 AC(Accepted),但遇到稍微變形的面試題時,依然無法獨立思考。

更高效的人機協同刷題方式,是把 AI 當作**「演算法教練」**:不讓它直接爆出解答,而是引導它先幫我們梳理題目脈絡、列出邊界條件,釐清解題思維。


一、破題引導提問法(Socratic Prompting)

在開始動筆寫代碼前,先要求 AI 只做「需求分析」,禁止直接產出最終解答代碼。

你可以使用以下提示詞結構:

【破題提示詞範本】
請擔任資深演算法面試官。我正在練習以下題目:
[貼上題目內容]

請先不要直接提供完整代碼,請依序回答以下三點:

  1. 關鍵約束提煉:這題的核心輸入範圍、特殊限制是什麼?
  2. 隱藏邊界條件(Edge Cases):有哪些極端情境(如長度為 0 或 1、負數、極值溢位)容易出錯?
  3. 思維漸進路徑:從直覺的暴力解法(Brute Force)出發,有什麼瓶頸?可以用什麼資料結構優化?

二、實戰演練:LeetCode 1 - Two Sum(兩數之和)

我們以所有工程師的第一道題目 Two Sum 為例:

給定一個整數陣列 nums 和一個目標值 target,請找出陣列中「和為目標值」的那兩個整數,並回傳它們的陣列下標。

步驟 1:要求 AI 梳理條件與陷阱

當我們送出上述提示詞後,AI 會給出極具價值的分析:

  • 約束提煉:
    • 每種輸入只會有「剛好一個有效解」。
    • 同一個元素不能重複使用兩次(例如 nums = [3, 2, 4], target = 6,不能挑選兩次下標 0 的 3)。
  • 邊界情境(Edge Cases):
    • 陣列內包含負數(例如 target = -8,nums = [-3, -5])。
    • 陣列內包含相同的數值(例如 nums = [3, 3], target = 6,這意味著如果用 Hash Table 存 Key,必須注意覆蓋問題)。
  • 優化思考路徑:
    • 暴力解(Brute Force):雙重迴圈遍歷所有數對,時間複雜度為 O(n²)。
    • 優化瓶頸:內層迴圈每次都在尋找「差值(target - num)是否存在」。
    • 資料結構切入:利用 Hash Table(HashMap)將尋找時間從 O(n) 降至 O(1),實現「以空間換取時間」。

三、從分析到代碼實作

當邊界條件與空間換時間的思路清晰後,我們再請 AI 依照這個思維產出 Java 解法,代碼邏輯就非常容易理解與吸收:
‵‵‵
import java.util.HashMap;
import java.util.Map;

public class Solution {
public int[] twoSum(int[] nums, int target) {
// 使用 HashMap 記錄:Key = 數值, Value = 該數值對應的陣列索引
Map<Integer, Integer> map = new HashMap<>();

    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];

        // 邊界檢查:如果先前已經看過這個差值,代表找到配對
        if (map.containsKey(complement)) {
            return new int[] { map.get(complement), i };
        }

        // 將當前數字與索引存入 Map,邊走邊查同時避免自己與自己配對
        map.put(nums[i], i);
    }

    // 題目保證有解,若無解則回傳空陣列防呆
    return new int[] {};
}

}
‵‵‵

四、工程師的實踐反思
透過這種「先分析邊界、再看代碼」的模式,有兩個明顯收穫:

避免 Hash Table Key 覆蓋的陷阱:

如果我們在一開始就把所有元素放進 map,遇到 [3, 3] 這種重複元素時,第二個 3 的下標會覆蓋第一個 3。而 AI 分析指出的「One-pass(單次遍歷邊查邊存)」策略,剛好在存入前先查到了前一個 3,完美化解覆蓋問題。

理解時空權衡(Time-Space Tradeoff):

時間複雜度由 O(n²) 大幅優化為 O(n),代價是額外消耗了 O(n) 的空間複雜度存儲 HashMap。

今日小結與預告
今天我們打破了「直接向 AI 索取 LeetCode 答案」的無效刷題法,建立了以「約束提煉 ➔ 邊界挖掘 ➔ 資料結構優化」為核心的破題流程。

明天的 Day 07,我們將聚焦於演算法面試最核心的指標:「【複雜度分析】向 AI 請教:如何評估演算法的時間複雜度(Big-O)與空間複雜度?」,教大家如何讓 AI 成為你的計算機演算法助教!


上一篇
Day 05:【精準控制】Few-shot Prompting 實踐:給範例讓 AI 輸出固定風格與型別規範的代碼
系列文
從 Prompt Engineering 到 Copilot / Codex 實務 30 天 共 6 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言